/**
 * AtividadeDAOJPA.java
 * 
 * Projeto: SGA-LEDS
 * 
 * Rodrigo Soares Maia
 * IFES - Instituto Federal do Espírito Santo - Campus Serra
 */

package controleAtividades.cgd;

import controleAtividades.cdp.Atividade;
import controleInterno.cdp.Colaborador;
import controleAtividades.cdp.NivelAtividade;
import controleInterno.cdp.Projeto;
import java.util.List;
import javax.persistence.Query;
import utilitario.utilitarioPersistencia.DAOJPA;

public class AtividadeDAOJPA extends DAOJPA<Atividade> implements AtividadeDAO
{
    public List<Atividade> obter(Projeto p) {
        Query query = entityManager.createQuery("SELECT a FROM Atividade a WHERE a.projeto.id = ?1");
        query.setParameter(1, p.getId());
        return query.getResultList();
    }
    
    public List<Atividade> obterAtividadesGeral(Projeto p) {
        Query query = entityManager.createQuery("SELECT a FROM Atividade a WHERE a.projeto.id = ?1 AND a.nivel = ?2");
        query.setParameter(1, p.getId());
        query.setParameter(2, NivelAtividade.GERAL);
        return query.getResultList();
    }
    
    public List<Atividade> obterAtividadesGrupo(Projeto p, Colaborador c) {
        Query query = entityManager.createQuery("SELECT a FROM Atividade a WHERE a.projeto.id = ?1");
        query.setParameter(1, p.getId());
        return query.getResultList();
    }
    
    public List<Atividade> obterAtividadesIndividual(Projeto p, Colaborador c) {
        Query query = entityManager.createQuery("SELECT a FROM Atividade a WHERE (a.projeto.id = ?1 AND a.nivel = ?2) OR (a.projeto.id = ?1 AND a.responsavel.id = ?3 AND a.nivel = ?4)");
        query.setParameter(1, p.getId());
        query.setParameter(2, NivelAtividade.GERAL);
        query.setParameter(3, c.getId());
        query.setParameter(4, NivelAtividade.INDIVIDUAL);
        return query.getResultList();
    }
    
//    public List<Atividade> obterAtividadesIndividual(Projeto p, Colaborador c) {
//        Query query = entityManager.createQuery("SELECT a FROM Atividade a WHERE a.projeto.id = ?1 AND a.responsavel.id = ?2 AND a.nivel = ?3");
//        query.setParameter(1, p.getId());
//        query.setParameter(2, c.getId());
//        query.setParameter(3, NivelAtividade.INDIVIDUAL);
//        return query.getResultList();
//    }
    
    public List<Atividade> obterFilhas(Atividade a) {
        Query query = entityManager.createQuery("SELECT a FROM Atividade a WHERE a.atividadePai.id = ?1");
        query.setParameter(1, a.getId());
        return query.getResultList();
    }
    
    public List<Atividade> obterFilhasGeral(Atividade a) {
        Query query = entityManager.createQuery("SELECT a FROM Atividade a WHERE a.atividadePai.id = ?1 AND a.nivel = ?2");
        query.setParameter(1, a.getId());
        query.setParameter(2, NivelAtividade.GERAL);
        return query.getResultList();
    }
    
    public List<Atividade> obterFilhasGrupo(Atividade a, Colaborador c) {
        Query query = entityManager.createQuery("SELECT a FROM Atividade a WHERE a.atividadePai.id = ?1 AND (a.nivel = ?2 OR (a.nivel = ?3 AND EXISTS(SELECT ca FROM ColaboradorAtividade ca WHERE ca.atividade.id = ?1 AND ca.colaborador.id = ?4)))");
        query.setParameter(1, a.getId());
        query.setParameter(2, NivelAtividade.GERAL);
        query.setParameter(3, NivelAtividade.GRUPO);
        query.setParameter(4, c.getId());
        return query.getResultList();
    }
    
    /**
     * Obtem todas as atividades de Nivel GERAL e todas as 
     * @param a
     * @param c
     * @return 
     */
    public List<Atividade> obterFilhasIndividual(Atividade a, Colaborador c) {
        Query query = entityManager.createQuery("SELECT a FROM Atividade a WHERE a.atividadePai.id = ?1 AND (a.nivel = ?4 OR (a.nivel = ?2 AND a.responsavel.id = ?3))");
        query.setParameter(1, a.getId());
        query.setParameter(2, NivelAtividade.INDIVIDUAL);
        query.setParameter(3, c.getId());
        query.setParameter(4, NivelAtividade.GERAL);
        return query.getResultList();
    }
}
